package entity;

import java.util.Date;
import java.util.List;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.Transient;

import com.sun.istack.internal.NotNull;

@Entity
@Table(name = "CAIXA", schema = "public")
@SequenceGenerator(name = "SEQ_CAIXA")
public class Caixa extends AbstractPersistableEntity{

	private int id;
	
	private Date data;
	
	private double valorInicial;
	
	private double valorFinal;
	
	private List<EntradaCaixa> entradas;
	
	private List<SaidaCaixa> saidas;

	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_CAIXA")
	@Column(name = "COD_CAIXA", nullable = false)
	public int getId() {
		return id;
	}

	
	public void setId(int id) {
		this.id = id;
	}

	@Column(name = "DATA", nullable = false)
	@NotNull
	@Temporal(javax.persistence.TemporalType.DATE)
	public Date getData() {
		return data;
	}

	public void setData(Date data) {
		this.data = data;
	}

	@Column(name = "VALOR_INICIAL", nullable = false)
	public double getValorInicial() {
		return valorInicial;
	}

	public void setValorInicial(double valorInicial) {
		this.valorInicial = valorInicial;
	}

	@Column(name = "VALOR_FINAL", nullable = false)
	public double getValorFinal() {
		return valorFinal;
	}

	public void setValorFinal(double valorFinal) {
		this.valorFinal = valorFinal;
	}

	@OneToMany(mappedBy = "caixa")
	@Column(name = "ENTRADAS")
	public List<EntradaCaixa> getEntradas() {
		return entradas;
	}

	public void setEntradas(List<EntradaCaixa> entradas) {
		this.entradas = entradas;
	}

	@OneToMany(mappedBy = "caixa")
	@Column(name = "SAIDAS")
	public List<SaidaCaixa> getSaidas() {
		return saidas;
	}

	public void setSaidas(List<SaidaCaixa> saidas) {
		this.saidas = saidas;
	}
	
	@Transient
	public double calcularValorDiario() {
		double valorEntrada = 0.0;
		double valorSaida = 0.0;
		
		for (EntradaCaixa entrada : this.getEntradas()) {
			valorEntrada += entrada.getValor();
		}
		
		for (SaidaCaixa saida : this.getSaidas()) {
			valorSaida += saida.getValor();
		}
		
		return valorEntrada - valorSaida;
		
	}
}
